Under a high-level programming language, memory regions accessed by an application are typically represented as a set of “objects,” such as arrays, matrices, class instances, etc. At a given time in execution, an object is “live” when the application still reads and writes data to/from the memory region. An object may be considered “dead” when the memory region will no longer be accessed by the application. Such “liveness” information can convey when the modified value stored in an object will not be re-read by the application. For example, for a C or C++ program, a region of memory returned to the memory allocator through free( )/delete would not be accessed again, unless re-allocated through malloc( )/new. In addition, the liveness status for stack data can be determined by observing the stack pointer. Objects that are above the stack pointer, can be considered to be “dead” as they are no longer accessed.